home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 19 / Night Owl (The Best of Shareware)(NOPV 19)(1996).ISO / 039a / epd_spec.zip / EPD-SPEC.TXT next >
Text File  |  1995-12-03  |  64KB  |  1,399 lines

  1. EPD_Spec: Extended Position Description Specification
  2.  
  3. Revised: 1995.11.26
  4.  
  5. Technical contact: sje@mv.mv.com (Steven J. Edwards)
  6.  
  7. 1: Introduction
  8.  
  9. EPD is "Extended Position Description".  It is a standard for describing 
  10. chess positions along with an extended set of structured attribute 
  11. values using the ASCII character set.  It is intended for data and 
  12. command interchange among chessplaying programs.  It is also intended 
  13. for the representation of portable opening library repositories and for 
  14. problem test suites.
  15.  
  16. EPD is an open standard and is freely available for use by both research 
  17. and commercial programs without charge.  The only requirement for use is 
  18. that any proposed extensions be coordinated through the technical 
  19. contact given at the start of this document.
  20.  
  21. A single EPD record uses one text line of variable length composed of 
  22. four data fields followed by zero or more operations.  A text file 
  23. composed exclusively of EPD data records should have a file name with 
  24. the suffix ".epd".
  25.  
  26.  
  27. 2: History
  28.  
  29. EPD was created in 1993 and is based in part on the earlier FEN standard 
  30. (Forsyth-Edwards Notation) for representing chess positions.  Compared 
  31. to FEN, EPD has added extensions for use with opening library 
  32. preparation and also for general data and command interchange among 
  33. advanced chess programs.  EPD was developed by John Stanback and Steven 
  34. Edwards; its first implementation was in Stanback's commercial 
  35. chessplaying program Zarkov and its second implementation was in 
  36. Edwards' research chessplaying program Spector.  So many programs have 
  37. since adopted EPD that no one knows the exact sequence thereafter.
  38.  
  39. EPD is employed for storing test suites for chessplaying programs and 
  40. for recording the results of programs running these test suites.  
  41. Example test suites are available for researchers via anonymous ftp from 
  42. the chess.onenet.net site in the pub/chess/Tests directory.  The ASCII 
  43. text file pub/chess/Tests/Manifest gives descriptions of the contents of 
  44. the various test suite files.
  45.  
  46. EPD is used to provide a linkage mechanism between chessplaying programs 
  47. and position database programs to support the automated direction of 
  48. analysis generation.
  49.  
  50.  
  51. 3: EPD tools and applications
  52.  
  53. To encourage development of EPD capable applications, a free EPD tool 
  54. kit is available for program authors working with the ANSI C language.  
  55. To further encourage usage of EPD, a number of free applications are 
  56. also available.
  57.  
  58.  
  59. 3.1: The EPD Kit
  60.  
  61. Work is currently in progress on developing an EPD Kit.  This tool kit 
  62. is a collection of portable ANSI C source code files that provide 
  63. routines to create and manipulate EPD data for arbitrarily complex 
  64. records.  It is designed to handle all common EPD related tasks so as to 
  65. assist chess program developers with EPD implementation.  A secondary 
  66. goal is to ensure that every implementation of EPD processing have the 
  67. same set of operational semantics.
  68.  
  69. The EPD Kit will be made freely available to all chess software authors 
  70. without charge and can be used in both research and commercial 
  71. applications.  As with EPD itself, the only requirement for use is that 
  72. any proposed extensions be coordinated through the technical contact 
  73. given at the start of this document.
  74.  
  75.  
  76. 3.2: Argus, the automated tournament referee
  77.  
  78. Work is currently in progress on developing Argus, an automated 
  79. tournament referee program for computer chess events.  Argus uses IP 
  80. (Internet Protocol) communications to act as a mediator for multiple 
  81. pairs of chessplaying programs and to provide an interactive interface 
  82. for a human tournament supervisor.  Argus uses the EPD Kit along with 
  83. other routines to perform the following tasks:
  84.  
  85. 1) Starting chessplaying programs (IP clients) with proper 
  86. initialization data;
  87.  
  88. 2) Relaying position/move data (using EPD) from each program to its 
  89. opponent;
  90.  
  91. 3) Providing all chess clock data as part of the relay process;
  92.  
  93. 4) Record all games using PGN (Portable Game Notation) to assist in the 
  94. production of the tournament final report;
  95.  
  96. 5) Record all moves and other transmitted data in log files for later 
  97. analysis;
  98.  
  99. 6) Detect and report time forfeit conditions;
  100.  
  101. 7) Mediate draw offers and responses between each pair of opponents;
  102.  
  103. 8) Recognize and handle game termination conditions due to draws, 
  104. resignations, time forfeits, and checkmates;
  105.  
  106. 9) Allow for chessplaying program restart and game resumption as 
  107. directed by the human supervisor;
  108.  
  109. 10) Allow for a second instance of itself to operate in observer mode to 
  110. be ready to take over in case of primary machine failure;
  111.  
  112. 11) Support display of games in progress for the benefit of the human 
  113. supervisor and for the general viewing audience.
  114.  
  115. In its usual configuration, Argus runs on an IP network that connects it 
  116. with all of the participating machines.  It acts like a Unix style 
  117. server using TCP/IP; the chessplaying programs connect to Argus as 
  118. TCP/IP clients.  Unlike a typical Unix style server, it runs in the 
  119. foreground instead of the background when operated by a human 
  120. supervisor.
  121.  
  122. One variant mode of operation allows for Argus to be started by the host 
  123. system and run in the background.  This use is intended for events where 
  124. human supervision is not required.  Any operating information usually 
  125. provided manually may instead be supplied by configuration files.
  126.  
  127. Another variant mode of operation allows for Argus to mediate 
  128. communication between a single pair of chessplaying programs using 
  129. regular (unstructured) bidirectional asynchronous serial communication 
  130. instead of IP.  While less reliable than IP operation, unstructured 
  131. serial communication can be used on common inexpensive hardware 
  132. platforms that lack IP support.  An example would be to use common PC 
  133. machines with each chessplaying program running on a separate machine 
  134. and a third machine running Argus in serial mode.  Each of the two 
  135. machines with chessplaying programs connect to the Argus machine via a 
  136. null modem cable.  Note that the Argus machine needs two free serial 
  137. ports while each of the chessplaying machines needs only a single free 
  138. serial port.
  139. The Argus program will be made freely available to all chess software 
  140. authors without charge and can be used in both research and commercial 
  141. applications.  As with EPD itself, the only requirement for use is that 
  142. any proposed extensions be coordinated through the technical contact 
  143. given at the start of this document.
  144.  
  145.  
  146. 3.3: Gastric, an EPD based report generator
  147.  
  148. Work is in progress on Gastric, an application that reads EPD files and 
  149. produces statistical reports.  The main use of Gastric is to assist in 
  150. the process of benchmarking chessplaying program performance on EPD test 
  151. suites.  The resulting reports contain summaries of raw performance, 
  152. identification of solved/missed problems, distribution information for 
  153. node count, time consumption, and other items.  Advanced functions of 
  154. Gastric may be used to produce comparative analysis of different 
  155. programs or different versions of the same program.  Some work is also 
  156. planned to allow Gastric output to be used as feedback into 
  157. self-adjusting chessplaying programs.
  158.  
  159. The Gastric program will be made freely available to all chess software 
  160. authors without charge and can be used in both research and commercial 
  161. applications.  As with EPD itself, the only requirement for use is that 
  162. any proposed extensions be coordinated through the technical contact 
  163. given at the start of this document.
  164.  
  165.  
  166. 4: The four EPD data fields
  167.  
  168. Each EPD record contains four data filed that describe the current 
  169. position.  From left to right starting at the beginning of the record, 
  170. these are the piece placement, the active color, the castling 
  171. availability, and the en passant target square of a position.  These can 
  172. all fit on a single text line in an easily read format.  The length of 
  173. an EPD position description varies somewhat according to the position 
  174. and any associated operations. In some cases, the description could be 
  175. eighty or more characters in length and so may not fit conveniently on 
  176. some displays.  However, most EPD records pass among programs only and 
  177. so are not usually seen by program users.
  178.  
  179. Note: due to the likelihood of future expansion of EPD, implementors are 
  180. encouraged to have their programs handle EPD text lines of up to 4096 
  181. characters long including the traditional ASCII NUL character as a 
  182. terminator.  This is an increase from the earlier suggestion of a 
  183. maximum length of 1024 characters.  Depending on the host operating 
  184. system, the external representation of EPD records will include one or 
  185. more bytes to indicate the end of a line.  These do not count against 
  186. the length limit as the internal representation of an EPD text record is 
  187. stripped of end of line bytes and instead is terminated by the 
  188. traditional ASCII NUL character.
  189.  
  190. Each of the four EPD data fields are composed only of non-blank printing 
  191. ASCII characters.  Adjacent data fields are separated by a single ASCII 
  192. space character.
  193.  
  194.  
  195. 4.1: Piece placement data
  196.  
  197. The first field represents the placement of the pieces on the board.  
  198. The board contents are specified starting with the eighth rank and 
  199. ending with the first rank.  For each rank, the squares are specified 
  200. from file a to file h.  White pieces are identified by uppercase SAN 
  201. (Standard Algebraic Notation) piece letters ("PNBRQK") and black pieces 
  202. are identified by lowercase SAN piece letters ("pnbrqk").  Empty squares 
  203. are represented by the digits one through eight; the digit used 
  204. represents the count of contiguous empty squares along a rank.  The 
  205. contents of all eight squares on each rank must be specified; therefore, 
  206. the count of piece letters plus the sum of the vacant square counts must 
  207. always equal eight.  The solidus character "/" (forward slash) is used 
  208. to separate data of adjacent ranks.  There is no leading or trailing 
  209. solidus in the piece placement data; hence there are exactly seven of 
  210. solidus characters in the placement field.
  211.  
  212. The piece placement data for the starting array is:
  213.  
  214. rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
  215.  
  216.  
  217. 4.2: Active color
  218.  
  219. The second field represents the active color.  A lower case "w" is used 
  220. if White is to move; a lower case "b" is used if Black is the active 
  221. player.
  222.  
  223. The piece placement and active color data for the starting array is:
  224.  
  225. rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w
  226.  
  227.  
  228. 4.3: Castling availability
  229.  
  230. The third field represents castling availability.  This indicates 
  231. potential future castling that may or may not be possible at the moment 
  232. due to blocking pieces or enemy attacks.  If there is no castling 
  233. availability for either side, the single character symbol "-" is used.  
  234. Otherwise, a combination of from one to four characters are present.  If 
  235. White has kingside castling availability, the uppercase letter "K" 
  236. appears.  If White has queenside castling availability, the uppercase 
  237. letter "Q" appears.  If Black has kingside castling availability, the 
  238. lowercase letter "k" appears.  If Black has queenside castling 
  239. availability, then the lowercase letter "q" appears.  Those letters 
  240. which appear will be ordered first uppercase before lowercase and second 
  241. kingside before queenside.  There is no white space between the letters.
  242.  
  243. The piece placement, active color, and castling availability data for 
  244. the starting array is:
  245.  
  246. rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq
  247.  
  248.  
  249. 4.4: En passant target square
  250.  
  251. The fourth field is the en passant target square.  If there is no en 
  252. passant target square then the single character symbol "-" appears.  If 
  253. there is an en passant target square then is represented by a lowercase 
  254. file character (one of "abcdefgh") immediately followed by a rank digit.  
  255. Obviously, the rank digit will be "3" following a white pawn double 
  256. advance (Black is the active color) or else be the digit "6" after a 
  257. black pawn double advance (White being the active color).
  258.  
  259. An en passant target square is given if and only if the last move was a 
  260. pawn advance of two squares.  Therefore, an en passant target square 
  261. field may have a square name even if there is no pawn of the opposing 
  262. side that may immediately execute the en passant capture.
  263.  
  264. The piece placement, active color, castling availability, and en passant 
  265. target square data for the starting array is:
  266.  
  267. rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq -
  268.  
  269.  
  270. 5: Operations
  271.  
  272. An EPD operation is composed of an opcode followed by zero or more 
  273. operands and is concluded by a semicolon.
  274.  
  275. Multiple operations are separated by a single space character.  If there 
  276. is at least one operation present in an EPD line, it is separated from 
  277. the last (fourth) data field by a single space character.
  278.  
  279.  
  280. 5.1: General format of opcodes and operands
  281.  
  282. An opcode is an identifier that starts with a letter character and may 
  283. be followed by up to fourteen more characters.  Each additional 
  284. character may be a letter or a digit or the underscore character.  
  285. Traditionally, no uppercase letters are used in opcode names that are to 
  286. be used by more than one program.
  287.  
  288.  
  289. An operand is either a set of contiguous non-white space printing 
  290. characters or a string.  A string is a set of contiguous printing 
  291. characters delimited by a quote (ASCII code: 34 decimal, 0x22 
  292. hexadecimal) character at each end.  A string value must have less than 
  293. 256 bytes of data.  This count does not include the traditional ASCII 
  294. NUL character terminator.
  295.  
  296. If at least one operand is present in an operation, there is a single 
  297. space between the opcode and the first operand.  If more than one 
  298. operand is present in an operation, there is a single blank character 
  299. between every two adjacent operands.  If there are no operands, a 
  300. semicolon character is appended to the opcode to mark the end of the 
  301. operation.  If any operands appear, the last operand has an appended 
  302. semicolon that marks the end of the operation.
  303.  
  304. Any given opcode appears at most once per EPD record.  Multiple 
  305. operations in a single EPD record should appear in ASCII order of their 
  306. opcode names (mnemonics).  However, a program reading EPD records may 
  307. allow for operations not in ASCII order by opcode mnemonics; the 
  308. semantics are the same in either case.
  309.  
  310. Some opcodes that allow for more than one operand may have special 
  311. ordering requirements for the operands.  For example, the "pv" 
  312. (predicted variation) opcode requires its operands (moves) to appear in 
  313. the order in which they would be played.  Most other opcodes that allow 
  314. for more than one operand should have operands appearing in ASCII order.  
  315. An example of the latter set is the "bm" (best move[s]) opcode; its 
  316. operands are moves that are all immediately playable from the current 
  317. position.
  318.  
  319.  
  320. 5.2: Operand basetypes
  321.  
  322. Operand values are represented using a variety of basetypes.
  323.  
  324.  
  325. 5.2.1:  Identifier basetype
  326.  
  327. Some opcodes require one of more operands that are identifiers.  An 
  328. identifier is an unquoted sequence of one to fifteen characters.  The 
  329. characters are selected from the upper and lower case letters, the ten 
  330. digits, and the underscore character.  Most identifiers that may appear 
  331. in EPD are taken from predefined sets as explained in the sections 
  332. covering opcode semantics.
  333.  
  334. Identifiers are most often used to select one value from a list of 
  335. possible values for a general attribute.  They are also used to 
  336. represent PGN tag attributes.
  337.  
  338.  
  339. 5.2.2:  Chess move basetype
  340.  
  341. Some opcodes require one or more operands that are chess moves.  These 
  342. moves should be represented using SAN (Standard Algebraic Notation).  If 
  343. a different representation is used, there is no guarantee that the EPD 
  344. will be read correctly during subsequent processing.  In particular, EDN 
  345. (English Descriptive Notation), CCN (Computer Coordinate Notation), and 
  346. LAN (Long Algebraic Notation) are explicitly not supported.
  347.  
  348. Chess moves are used most often in single operand operations to select 
  349. one move from the available moves.  They are also used in multiple 
  350. operand operations to define a set of moves (all taken from available 
  351. moves) and in multiple operand operations to express a sequence of moves 
  352. (taken from moves available at each point in a forward sequence of 
  353. play).
  354.  
  355. Note that some chess moves also qualify as identifiers.  However, the 
  356. semantics of a particular opcode dictate the exact basetype 
  357. interpretation of its operands, so there is no ambiguity.
  358.  
  359.  
  360. 5.2.3:  Integer basetype
  361.  
  362. Some opcodes require one or more operands that are integers.  Some 
  363. opcodes may require that an integer operand must be within a given 
  364. range; the details are described in the opcode list given below.  A 
  365. negative integer is formed with a hyphen (minus sign) preceding the 
  366. integer digit sequence.  An optional plus sign may be used for 
  367. indicating a non-negative value, but such use is not required and is 
  368. discouraged.  Support for integers in the range -2147483648 to 
  369. 2147483647 (32 bit two's complement signed extrema) is required.
  370.  
  371. Integers are used to represent centipawn scores and also for various 
  372. counts, limits, and totals.
  373.  
  374.  
  375. 5.2.4:  Floating basetype
  376.  
  377. Some opcodes require one or more operands that are floating point 
  378. numbers.  Some opcodes may require that a floating point operand must be 
  379. within a given range; the details are described in the opcode list given 
  380. below.  A floating point operand is constructed from an optional sign 
  381. character ("+" or "-"), a digit sequence (with at least one digit), a 
  382. radix point (always "."), and a final digit sequence (with at least one 
  383. digit).  There is currently no provision for scientific representation 
  384. of numeric values.
  385.  
  386. The floating basetype in not in current use.
  387.  
  388.  
  389. 5.2.5:  Date basetype
  390.  
  391. Some opcodes require one or more operands that represent dates.  These 
  392. are given in a special date format composed of ten characters.  The 
  393. first four characters are digits that give the year (0001-9999), the 
  394. fifth character is a period, the sixth and seventh characters are digits 
  395. that give the month number (01-12), the eighth character is a period, 
  396. and the ninth and tenth characters are digits that give the day number 
  397. in the month (01-31).
  398.  
  399. The date basetype is used to specify date values in timestamps.
  400.  
  401.  
  402. 5.2.6:  Time of day basetype
  403.  
  404. Some opcodes require one or more operands that represent a time of day.  
  405. These are given in a special time of day format composed of eight 
  406. characters.  The first two characters are digits that give the hour 
  407. (00-23), the third character is a colon, the fourth and fifth characters 
  408. are digits that give the minute (00-59), the sixth character is a colon, 
  409. and the seventh and eighth characters are digits that give the second 
  410. (00-59).
  411.  
  412. The time of day basetype is used to specify time of day values in 
  413. timestamps.
  414.  
  415.  
  416. 5.2.7:  Clock basetype
  417.  
  418. Some opcodes require one or more operands that represent a total amount 
  419. of time as would be measured by a traditional digital clock.  These are 
  420. given in a special clock format composed of 12 characters.  The first 
  421. three characters are digits giving a count of days (000-999), the fourth 
  422. character is a colon, the fifth and sixth characters are digits giving a 
  423. count of hours (00-23), the seventh character is a colon, the eighth and 
  424. ninth characters are digits giving a count of minutes (00-59), the tenth 
  425. character is a colon, and the eleventh and twelfth characters are digits 
  426. giving a count of seconds (00-59).
  427.  
  428. The clock basetype is used to specify clock values for chess clock 
  429. information.  It is not used to measure time consumption for a search; 
  430. an integer count of seconds is used instead.
  431.  
  432.  
  433. 5.3: Opcode mnemonics
  434.  
  435. An opcode mnemonic used for archival storage and for interprogram 
  436. communication starts with a lower case letter and is composed of only 
  437. lower case letters, digits, and the underscore character (i.e., no upper 
  438. case letters).  Mnemonics are all at least two characters long.
  439.  
  440. Opcode mnemonics used only by a single program or an experimental suite 
  441. of programs should start with an upper case letter.  This is so they may 
  442. be easily distinguished should they be inadvertently be encountered by 
  443. other programs.  When a such a "private" opcode be demonstrated to be 
  444. widely useful, it should be brought into the official list (appearing 
  445. below) in a lower case form.
  446.  
  447. If a given program does not recognize a particular opcode, that 
  448. operation is simply ignored; it is not signaled as an error.
  449.  
  450.  
  451. 6: Opcode list
  452.  
  453. The opcodes are listed here in ASCII order of their mnemonics.  
  454. Suggestions for new opcodes should be sent to the technical contact 
  455. listed near the start of this document.
  456.  
  457.  
  458. 6.1: Opcode "acn": analysis count: nodes
  459.  
  460. The opcode "acn" takes a single non-negative integer operand.  It is 
  461. used to represent the number of nodes examined in an analysis or search.  
  462. Note that the value may be quite large for some extended searches and so 
  463. use of a long (four byte) representation is suggested.
  464.  
  465.  
  466. 6.2: Opcode "acs": analysis count: seconds
  467.  
  468. The opcode "acs" takes a single non-negative integer operand.  It is 
  469. used to represent the number of seconds used for an analysis or search.  
  470. Note that the value may be quite large for some extended searches and so 
  471. use of a long (four byte) representation is suggested.  Also note that 
  472. the special clock format is not used for this operand.  Some systems can 
  473. distinguish between elapsed time and processor time; in such cases, the 
  474. processor time should be used as its value is usually more indicative of 
  475. search effort than wall clock time.
  476.  
  477.  
  478. 6.3: Opcode "am": avoid move(s)
  479.  
  480. The opcode "am" indicates a set of zero or more moves, all immediately 
  481. playable from the current position, that are to be avoided as a search 
  482. result.  Each operand is a SAN move; they appear in ASCII order.
  483.  
  484.  
  485. 6.4: Opcode "bm": best move(s)
  486.  
  487. The opcode "bm" indicates a set of zero or more moves, all immediately 
  488. playable from the current position, that are judged to the best 
  489. available by the EPD writer and so each is allowable as a search result.  
  490. Each operand is a SAN move; they appear in ASCII order.
  491.  
  492.  
  493. 6.5: Opcode "c0": comment (primary, also "c1" though "c9")
  494.  
  495. The opcode "c0" (lower case letter "c", digit character zero) indicates 
  496. a top level comment that applies to the given position.  It is the first 
  497. of ten ranked comments, each of which has a mnemonic formed from the 
  498. lower case letter "c" followed by a single decimal digit.  Each of these 
  499. opcodes takes either a single string operand or no operand at all.
  500.  
  501. This ten member comment family of opcodes is intended for use as 
  502. descriptive commentary for a complete game or game fragment.  The usual 
  503. processing of these opcodes are as follows:
  504.  
  505. 1) At the beginning of a game (or game fragment), a move sequence 
  506. scanning program initializes each element of its set of ten comment 
  507. string registers to be null.
  508.  
  509. 2) As the EPD record for each position in the game is processed, the 
  510. comment operations are interpreted from left to right.  (Actually, all 
  511. operations in an EPD record are interpreted from left to right.)  
  512. Because operations appear in ASCII order according to their opcode 
  513. mnemonics, opcode "c0" (if present) will be handled prior to all other 
  514. opcodes, then opcode "c1" (if present), and so forth until opcode "c9" 
  515. (if present).
  516.  
  517. 3) The processing of opcode "cN" (0 <= N <= 9) involves two steps.  
  518. First, all comment string registers with an index equal to or greater 
  519. than N are set to null.  (This is the set "cN" though "c9".)  Second, 
  520. and only if a string operand is present, the value of the corresponding 
  521. comment string register is set equal to the string operand.
  522.  
  523.  
  524. 6.6: Opcode "cc": chess clock values
  525.  
  526. The opcode "cc" is used to indicate the amount of time used for each 
  527. side at the time of the writing of the opcode to the EPD record.  This 
  528. opcode always takes two values.  Both values are in clock format.  The 
  529. first is the amount of time consumed by White and the second is the 
  530. amount of time consumed by Black.  Note that these values are not simple 
  531. integers.  Also, there is no provision for recording at a resolution of 
  532. less than one second.
  533.  
  534. This opcode is most commonly used by a mediation program as a source of 
  535. impartial time information for a pair of opposing players.
  536.  
  537.  
  538. 6.7: Opcode "ce": centipawn evaluation
  539.  
  540. The opcode "ce" indicates the evaluation of the indicated position in 
  541. centipawn units.  It takes a single operand, an optionally signed 
  542. integer that gives an evaluation of the position from the viewpoint of 
  543. the active player; i.e., the player with the move.  Positive values 
  544. indicate a position favorable to the moving player while negative values 
  545. indicate a position favorable to the passive player; i.e., the player 
  546. without the move.  A centipawn evaluation value close to zero indicates 
  547. a neutral positional evaluation.
  548.  
  549. Values are restricted to integers that are equal to or greater than 
  550. -32768 and 
  551. are less than or equal to 32766.
  552.  
  553. A value greater than 32000 indicates the availability of a forced mate 
  554. to the active player.  The number of plies until mate is given by 
  555. subtracting the evaluation from the value 32767.  Thus, a winning mate 
  556. in N fullmoves is a mate in ((2 * N) - 1) halfmoves (or ply) and has a 
  557. corresponding centipawn evaluation of (32767 - ((2 * N) - 1)).  For 
  558. example, a mate on the move (mate in one) has a centipawn evaluation of 
  559. 32766 while a mate in five has a centipawn evaluation of 32758.
  560.  
  561. A value less than -32000 indicates the availability of a forced mate to 
  562. the passive player.  The number of plies until mate is given by 
  563. subtracting the evaluation from the value -32767 and then negating the 
  564. result.  Thus, a losing mate in N fullmoves is a mate in (2 * N) 
  565. halfmoves (or ply) and has a corresponding centipawn evaluation of 
  566. (-32767 + (2 * N)).  For example, a mate after the move (losing mate in 
  567. one) has a centipawn evaluation of -32765 while a losing mate in five 
  568. has a centipawn evaluation of -32757.
  569.  
  570. A value of -32767 indicates that the side to move is checkmated.  A 
  571. value of -32768 indicates an illegal position.  A stalemate position has 
  572. a centipawn evaluation of zero as does a position drawn due to 
  573. insufficient mating material.  Any other position known to be a certain 
  574. forced draw also has a centipawn evaluation of zero.
  575.  
  576.  
  577. 6.8: Opcode "dm": direct mate fullmove count
  578.  
  579. The "dm" opcode is used to indicate the number of fullmoves until 
  580. checkmate is to be delivered by the active color for the indicated 
  581. position.  It always takes a single operand which is a positive integer 
  582. giving the fullmove count.  For example, a position known to be a "mate 
  583. in three" would have an operation of "dm 3;" to indicate this.
  584.  
  585. This opcode is intended for use with problem sets composed of positions 
  586. requiring direct mate answers as solutions.
  587.  
  588.  
  589. 6.9: Opcode "draw_accept": accept a draw offer
  590.  
  591. The opcode "draw_accept" is used to indicate that a draw offer made 
  592. after the move that lead to the indicated position is accepted by the 
  593. active player.  This opcode takes no operands.
  594.  
  595. The "draw_accept" opcode should not appear on the same EPD record as a 
  596. "draw_reject" opcode.
  597.  
  598.  
  599. 6.10: Opcode "draw_claim": claim a draw
  600.  
  601. The opcode "draw_claim" is used to indicate claim by the active player 
  602. that a draw exists.  The draw is claimed because of a third time 
  603. repetition or because of the fifty move rule or because of insufficient 
  604. mating material.  A supplied move (see the opcode "sm") is also required 
  605. to appear as part of the same EPD record.  The "draw_claim" opcode takes 
  606. no operands.
  607.  
  608. The "draw_claim" opcode should not appear on the same EPD record as a 
  609. "draw_offer" opcode.
  610.  
  611.  
  612. 6.11: Opcode "draw_offer": offer a draw 
  613.  
  614. The opcode "draw_offer" is used to indicate that a draw is offered by 
  615. the active player.  A supplied move (see the opcode "sm") is also 
  616. required to appear as part of the same EPD record; this move is 
  617. considered played from the indicated position.  The "draw_offer" opcode 
  618. takes no operands.
  619.  
  620. The "draw_offer" opcode should not appear on the same EPD record as a 
  621. "draw_claim" opcode.
  622.  
  623.  
  624. 6.12: Opcode "draw_reject": reject a draw offer
  625.  
  626. The opcode "draw_reject" is used to indicate that a draw offer made 
  627. after the move that lead to the indicated position is rejected by the 
  628. active player.  This opcode takes no operands.
  629.  
  630. The "draw_reject" opcode should not appear on the same EPD record as a 
  631. "draw_accept" opcode.
  632.  
  633.  
  634. 6.13: Opcode "eco": _Encyclopedia of Chess Openings_ opening code
  635.  
  636. The opcode "eco" is used to associate an opening designation from the 
  637. _Encyclopedia of Chess Openings_ taxonomy with the indicated position.  
  638. The opcode takes either a single string operand (the ECO opening name) 
  639. or no operand at all.  If an operand is present, its value is associated 
  640. with an "ECO" string register of the scanning program.  If there is no 
  641. operand, the ECO string register of the scanning program is set to null.
  642.  
  643. The usage is similar to that of the "ECO" tag pair of the PGN standard.
  644.  
  645.  
  646. 6.14: Opcode "fmvn": fullmove number
  647.  
  648. The opcode "fmvn" represents the fullmove number associated with the 
  649. position.  It always takes a single operand that is the positive integer 
  650. value of the move number.  The value of the fullmove number for the 
  651. starting array is one.
  652.  
  653. This opcode is used to explicitly represent the fullmove number in EPD 
  654. that is present by default in FEN as the sixth field.  Fullmove number 
  655. information is usually omitted from EPD because it does not affect move 
  656. generation (commonly needed for EPD-using tasks) but it does affect game 
  657. notation (commonly needed for FEN-using tasks).  Because of the desire 
  658. for space optimization for large EPD files, fullmove numbers were 
  659. dropped from EPD's parent FEN.  The halfmove clock information was 
  660. similarly dropped.
  661.  
  662.  
  663. 6.15: Opcode "hmvc": halfmove clock
  664.  
  665. The opcode "hmvc" represents the halfmove clock associated with the 
  666. position.  The halfmove clock of a position is equal to the number of 
  667. plies since the last pawn move or capture.  This information is used to 
  668. implement the fifty move draw rule.  It always takes a single operand 
  669. that is the non-negative integer value of the halfmove clock.  The value 
  670. of the halfmove clock for the starting array is zero.
  671.  
  672. This opcode is used to explicitly represent the halfmove clock in EPD 
  673. that is present by default in FEN as the fifth field.  Halfmove clock 
  674. information is usually omitted from EPD because it does not affect move 
  675. generation (commonly needed for EPD-using tasks) but it does affect game 
  676. termination issues (commonly needed for FEN-using tasks).  Because of 
  677. the desire for space optimization for large EPD files, halfmove clock 
  678. values were dropped from EPD's parent FEN.  The fullmove number 
  679. information was similarly dropped.
  680.  
  681.  
  682. 6.16: Opcode "id": position identification
  683.  
  684. The opcode "id" is used to provide a simple identification label for the 
  685. indicated position.  It takes a single string operand.
  686.  
  687. This opcode is intended for use with test suites used for measuring 
  688. chessplaying program strength.  An example "id" operand for the seven 
  689. hundred fifty seventh position of the one thousand one problems in 
  690. Reinfeld's _1001 Winning Chess Sacrifices and Combinations_ would be 
  691. "WCSAC.0757" while the fifteenth position in the twenty four problem 
  692. Bratko-Kopec test suite would have an "id" operand of "BK.15".
  693.  
  694.  
  695. 6.17: Opcode "nic": _New In Chess_ opening code
  696.  
  697. The opcode "nic" is used to associate an opening designation from the 
  698. _New In Chess_ taxonomy with the indicated position.  The opcode takes 
  699. either a single string operand (the NIC code for the opening) or no 
  700. operand at all.  If an operand is present, its value is associated with 
  701. an "NIC" string register of the scanning program.  If there is no 
  702. operand, the NIC string register of the scanning program is set to null.
  703.  
  704. The usage is similar to that of the "NIC" tag pair of the PGN standard.
  705.  
  706.  
  707. 6.18: Opcode "noop": no operation
  708.  
  709. The "noop" opcode is used to indicate no operation.  It takes zero or 
  710. more operands, each of which may be of any type.  The operation involves 
  711. no processing.  It is intended for use by developers for program testing 
  712. purposes.
  713.  
  714.  
  715. 6.19: Opcode "pm": predicted move
  716.  
  717. The "pm" opcode is used to provide a single predicted move for the 
  718. indicated position.  It has exactly one operand, a move playable from 
  719. the position.  This move is judged by the EPD writer to represent the 
  720. best move available to the active player.
  721.  
  722. If a non-empty "pv" (predicted variation) line of play is also present 
  723. in the same EPD record, the first move of the predicted variation is the 
  724. same as the predicted move.
  725.  
  726. The "pm" opcode is intended for use as a general "display hint" 
  727. mechanism.
  728.  
  729.  
  730. 6.20: Opcode "ptp": PGN tag pair
  731.  
  732. The "ptp" opcode is used to record a PGN tag pair.  It always takes an 
  733. even number of operands.  For each pair of operands (from left to 
  734. right), the first operand in the pair is always an identifier and is 
  735. interpreted as the name of a PGN tag; the second operand in the pair is 
  736. always a string and is the value associated with the tag given by the 
  737. first operand.
  738.  
  739. Any given PGN tag name should only appear once as a tag identifier 
  740. operand in a "ptp" operation.
  741.  
  742.  
  743. 6.21: Opcode "pv": predicted variation
  744.  
  745. The "pv" opcode is used to provide a predicted variation for the 
  746. indicated position.  It has zero or more operands which represent a 
  747. sequence of moves playable from the position.  This sequence is judged 
  748. by the EPD writer to represent the best play available.
  749.  
  750. If a "pm" (predicted move) operation is also present in the same EPD 
  751. record, the predicted move is the same as the first move of the 
  752. predicted variation.
  753.  
  754.  
  755. 6.22: Opcode "rc": repetition count
  756.  
  757. The "rc" opcode is used to indicate the number of occurrences of the 
  758. indicated position.  It takes a single, positive integer operand.  Any 
  759. position, including the initial starting position, is considered to have 
  760. an "rc" value of at least one.  A value of three indicates a candidate 
  761. for a draw claim by the position repetition rule.
  762.  
  763.  
  764. 6.23: Opcode "refcom": referee command
  765.  
  766. The "refcom" opcode is used to represent a command from a referee 
  767. program to a client program during automated competition.  It takes a 
  768. single identifier operand which is to be interpreted as a command by the 
  769. receiving program.  Note that as the operand is an identifier and not a 
  770. string value, it is not enclosed in quote characters.
  771.  
  772. There are seven available operand values: conclude, disconnect, execute, 
  773. fault, inform, reset, and respond.
  774.  
  775. Further details of "refcom" usage are given in the section on referee 
  776. semantics later in this document.
  777.  
  778.  
  779. 6.24: Opcode "refreq": referee request
  780.  
  781. The "refreq" opcode is used to represent a request from a client program 
  782. to the referee program during automated competition.  It takes a single 
  783. identifier operand which is to be interpreted as a request to the 
  784. referee from a client program.  Note that as the operand is an 
  785. identifier and not a string value, it is not enclosed in quote 
  786. characters.
  787.  
  788. There are four available operand values: fault, reply, sign_off, and 
  789. sign_on.
  790.  
  791. Further details of "refreq" usage are given in the section on referee 
  792. semantics later in this document.
  793.  
  794.  
  795. 6.25: Opcode "resign": game resignation
  796.  
  797. The opcode "resign" is used to indicate that the active player has 
  798. resigned the game.  This opcode takes no operands.
  799.  
  800. The "resign" opcode should not appear on the same EPD record with any of 
  801. the following opcodes: "draw_accept", "draw_claim", "draw_decline', and 
  802. "draw_offer".
  803.  
  804.  
  805. 6.26: Opcode "sm": supplied move
  806.  
  807. The "sm" opcode is used to provide a single supplied move for the 
  808. indicated position.  It has exactly one operand, a move playable from 
  809. the position.  This move is the move to be played from the position.
  810.  
  811. If a "sv" (supplied variation) operation is present on the same record 
  812. and has at least one operand, then its first operand must match the 
  813. single operand of the "sm" opcode.
  814.  
  815. The "sm" opcode is intended for use to communicate the most recent 
  816. played move in an active game.  It is used to communicate moves between 
  817. programs in automatic play via a network.  This includes correspondence 
  818. play using e-mail and also programs acting as network front ends to 
  819. human players.
  820.  
  821.  
  822. 6.27: Opcode "sv": supplied variation
  823.  
  824. The "sv" opcode is used to provide zero or more supplied moves for the 
  825. indicated position.  The operands are a move sequence playable from the 
  826. position.
  827.  
  828. If an "sm" (supplied move) operation is also present on the same record 
  829. and the "sv" operation has at least one operand, then the "sm" operand 
  830. must match the first operand of the "sv" operation.
  831.  
  832.  
  833. 6.28: Opcode "tcgs": telecommunication: game selector
  834.  
  835. The "tcgs" opcode is one of the telecommunication family of opcodes used 
  836. for games conducted via e-mail and similar means.  This opcode takes a 
  837. single operand that is a positive integer.  It is used to select among 
  838. various games in progress between the same sender and receiver.
  839.  
  840. Details of e-mail implementation await further development.
  841.  
  842.  
  843. 6.29: Opcode "tcri": telecommunication: receiver identification
  844.  
  845. The "tcri" opcode is one of the telecommunication family of opcodes used 
  846. for games conducted via e-mail and similar means.  This opcode takes two 
  847. order dependent string operands.  The first operand is the e-mail 
  848. address of the receiver of the EPD record.  The second operand is the 
  849. name of the player (program or human) at the address who is the actual 
  850. receiver of the EPD record.
  851.  
  852. Details of e-mail implementation await further development.
  853.  
  854.  
  855. 6.30: Opcode "tcsi": telecommunication: sender identification
  856.  
  857. The "tcsi" opcode is one of the telecommunication family of opcodes used 
  858. for games conducted via e-mail and similar means.  This opcode takes two 
  859. order dependent string operands.  The first operand is the e-mail 
  860. address of the sender of the EPD record.  The second operand is the name 
  861. of the player (program or human) at the address who is the actual sender 
  862. of the EPD record.
  863.  
  864. Details of e-mail implementation await further development.
  865.  
  866.  
  867. 6.31: Opcode "ts": timestamp
  868.  
  869. The "ts" opcode is used to record a timestamp value.  It takes two 
  870. operands.  The first operand is in date format and the second operand is 
  871. in time of day format. The interpretation of the combined operand values 
  872. gives the time of the last modification of the EPD record.  The 
  873. timestamp is interpreted to be in UTC (Universal Coordinated Time, 
  874. formerly known as GMT).
  875.  
  876.  
  877. 6.32: Opcode "v0": variation name (primary, also "v1" though "v9")
  878.  
  879. The opcode "v0" (lower case letter "v", digit character zero) indicates 
  880. a top level variation name that applies to the given position.  It is 
  881. the first of ten ranked variation names, each of which has a mnemonic 
  882. formed from the lower case letter "v" followed by a single decimal 
  883. digit.  Each of these opcodes takes either a single string operand or no 
  884. operand at all.
  885.  
  886. This ten member variation name family of opcodes is intended for use as 
  887. traditional variation names for a complete game or game fragment.  The 
  888. usual processing of these opcodes are as follows:
  889.  
  890. 1) At the beginning of a game (or game fragment), a move sequence 
  891. scanning program initializes each element of its set of ten variation 
  892. name string registers to be null.
  893.  
  894. 2) As the EPD record for each position in the game is processed, the 
  895. variation name operations are interpreted from left to right.  
  896. (Actually, all operations in an EPD record are interpreted from left to 
  897. right.)  Because operations appear in ASCII order according to their 
  898. opcode mnemonics, opcode "v0" (if present) will be handled prior to all 
  899. other opcodes, then opcode "v1" (if present), and so forth until opcode 
  900. "v9" (if present).
  901.  
  902. 3) The processing of opcode "vN" (0 <= N <= 9) involves two steps.  
  903. First, all variation name string registers with an index equal to or 
  904. greater than N are set to null.  (This is the set "vN" though "v9".)  
  905. Second, and only if a string operand is present, the value of the 
  906. corresponding variation name string register is set equal to the string 
  907. operand.
  908.  
  909.  
  910. 7: EPD processing verbs
  911.  
  912. An EPD processing verb is a command to an EPD capable program used to 
  913. direct processing of one or more EPD files.  Standardization of verb 
  914. semantics among EPD capable programs is important to helping reduce 
  915. confusion among program users and to better insure overall 
  916. interoperatibilty.
  917.  
  918. Each EPD processing verb that requires the reading of EPD records has a 
  919. specific set of required opcodes that must be on each input record.  
  920. Each EPD processing verb that requires the writing of EPD records has a 
  921. specific set of required opcodes that must be on each output record.  
  922. Some EPD processing verbs imply both reading and writing EPD records; 
  923. these will have requirements for both input and output opcode sets.
  924.  
  925. The names of the EPD processing verbs in this section are for use for 
  926. specification purposes only.  Program authors are free to select 
  927. different names as appropriate for the needs of a program's user 
  928. interface.
  929.  
  930.  
  931. 7.1: EPD verb: pfdn (process file: data normalization)
  932.  
  933. The "pfdn" (process file: data normalization) verb reads an EPD input 
  934. file and produces a normalized copy of the data on as the EPD output 
  935. file.  The output file retains the record ordering of the input file.  
  936. The noramlization is used to produce a canonical representation of the 
  937. EPD.  The input records are also checked for legality.  There is no 
  938. minimum set of operations requires on the input records.  For each input 
  939. record, all of the operations present are reproduced in the 
  940. corresponding output record.
  941.  
  942. The normalization of each EPD record consists of the following actions:
  943.  
  944. 1) Any leading whitespace characters are removed.
  945.  
  946. 2) Any trailing whitespace characters are removed.
  947.  
  948. 3) Any unneeded whitespace characters used as data separators are 
  949. removed; a single blank is used to separate adjacent fields, adjacent 
  950. operations, and adjacent operands.  Also, a single blank character is 
  951. used to separate the fourth position data field (the en passant target 
  952. square indication) from the first operation (if present).
  953.  
  954. 4) Operations are reordered in increasing ASCII order by opcode 
  955. mnemonic.
  956.  
  957. 5) Operands for each opcode that does not require a special order of 
  958. interpretation are reordered in increasing ASCII order by external 
  959. representation.
  960.  
  961. Data normalization is useful for making a canonical version from data 
  962. produced by programs or other sources that do not completely conform to 
  963. the lexigraphical and ordering rules of the EPD standard.  It also helps 
  964. when comparing two EPD files from different sources on a line by line 
  965. basis; the non-semantic differences are removed so that different text 
  966. lines indicate true semantic difference.
  967.  
  968.  
  969. 7.2: EPD verb: pfga (process file: general analysis)
  970.  
  971. The "pfga" (process file: general analysis) verb is used to instruct a 
  972. chessplaying program to perform an analysis for each EPD input record 
  973. and produce an EPD output file containing this analysis.  The output 
  974. file retains the record ordering of the input file.  The current 
  975. position given by each input record is not changed; it is copied to the 
  976. output.
  977.  
  978. Each input EPD record receives the same analysis effort.  The level of 
  979. effort is indicated as a command (separate from EPD) to the analysis 
  980. program prior to the start of the EPD processing.  Usually, the level is 
  981. given as a time limit or depth limit per each position.  The limit can 
  982. be either a hard limit or a soft limit.  A hard limit represents an 
  983. absolute maximum effort per position, while a soft limit allows the 
  984. program to spend more or less effort per position.  The hard limit 
  985. interpretation is preferred for comparing programs.  The soft limit 
  986. interpretation is used to help test time allocation strategy where a 
  987. program can choose to take more or less time depending on the complexity 
  988. of a position.
  989.  
  990. Each EPD output record is a copy of the corresponding EPD input record 
  991. with new analysis added as a result of the verb processing.
  992.  
  993. There is no minimum set of operations required for the EPD input 
  994. records.
  995.  
  996. Each output EPD record must contain:
  997.  
  998. 1) A "pv" (predicted variation) operation.  The operands of this form a 
  999. sequence of chess moves to be played from the given position.  The 
  1000. length of this may vary from record to record due to the level of 
  1001. anaylsis effort and the complexity of each position. However, unless the 
  1002. current position represents a checkmate or stalemate for the side to 
  1003. move, the pv operation must include at least one move.  If the current 
  1004. position represents a checkmate or stalemate for the side to move, then 
  1005. the pv operation still appears, but has no operands.
  1006.  
  1007. 2) A "ce" (centipawn evaluation) operation.  The value of its operand is 
  1008. the value in hundredths of a pawn of the current position.  Note that 
  1009. the evaluation is assigned to the position before the predicted move (or 
  1010. any other move) is made.  Thus, a positive centipawn score indicates an 
  1011. advantage for the side to move in the current position while a negative 
  1012. score indicates a disadvantage for the side to move.
  1013.  
  1014. Each output EPD record may also contain:
  1015.  
  1016. 1) A "pm" (predicted move) operation, unless the current position 
  1017. represents a checkmate or stalemate for the side to move.  (If the side 
  1018. to move has no moves, then the "pm" operation will not appear.)  The 
  1019. single operand of the "pm" opcode must be the same as the first operand 
  1020. of the "pv" sequence.
  1021.  
  1022. 2) A "sm" (supplied move) operation, unless the current position 
  1023. represents a checkmate or stalemate for the side to move.  (If the side 
  1024. to move has no moves, then the "sm" operation will not appear.)  The 
  1025. single operand of the "sm" opcode must be the same as the first operand 
  1026. of the "pv" sequence.
  1027.  
  1028. 3) An "acn" (analysis count: nodes) operation.  The single operand is 
  1029. the number of nodes visited in the analysis search for the position.
  1030.  
  1031. 4) An "acs" (analysis count: seconds) operation.  The single operand is 
  1032. the number of seconds used for the analysis search for the position.
  1033.  
  1034.  
  1035. 7.3: EPD verb: pfms (process file: mate search)
  1036.  
  1037. The "pfms" verb is used to conduct searches for forced checkmating 
  1038. sequences.  The length of the forced mate sequence is provided (outside 
  1039. of EPD) to the program prior to the beginning of "pfms" processing.  The 
  1040. length is specified using a fullmove count.  For example, a fullmove 
  1041. mate length of three would instruct the program to search for all mates 
  1042. in three.  An analysis program reads and input EPD file and looks for 
  1043. forced mates in each position where no forced mate of equal or lesser 
  1044. length has been recorded.  The output file retains the record ordering 
  1045. of the input file.
  1046.  
  1047. The action of the "pfms" command on each record is governed by the 
  1048. pre-specified fullmove count and, if present on the record, the value of 
  1049. the "dm" (direct mate fullmove count) operand.  A particular record will 
  1050. be subject to a search for a forced mate if either:
  1051.  
  1052. 1) There is no "dm" operation on the input record, or
  1053.  
  1054. 2) The value of the "dm" operand on the input record is greater than the 
  1055. value of the pre-specified fullmove analysis length.
  1056.  
  1057. If the analysis program finds a forced mate, it produces two additional 
  1058. operations on the corresponding output EPD record:
  1059.  
  1060. 1) A "dm" operation with an operand equal to the pre-specified fullmove 
  1061. mate length.
  1062.  
  1063. 2) A "pm" operation with the first move of the mating sequence as its 
  1064. operand.  If two or more such moves exist, the program selects the first 
  1065. one it located to appear as the "pm" operand.
  1066.  
  1067. The idea is that a set of positions can be repeatedly scanned by a mate 
  1068. finding program with the fullmove analysis depth starting with a value 
  1069. of one and being increased by one with each pass.  For any given pass, 
  1070. the positions solved by an earlier pass are skipped.
  1071.  
  1072. The output EPD records may also contain other (optional) information 
  1073. such as "acn", "acs", and "pv" operations.
  1074.  
  1075.  
  1076. 7.4: EPD verb: pfop (process file: operation purge)
  1077.  
  1078. The "pfop" verb is used to purge a particular operation from each of the 
  1079. records in an EPD file that contain the operation.  The output file 
  1080. retains the record ordering of the input file.  Prior to processing, the 
  1081. opcode of the operation to be purged is specified.
  1082.  
  1083. The records of the input file are copied to the output file.  If the 
  1084. pre-specified operation is present on a record, the operation is removed 
  1085. prior to copying the record to the output.
  1086.  
  1087.  
  1088. 7.5: EPD verb: pfts (process file: target search)
  1089.  
  1090. The "pfts" (process file: target search) verb is similar to the "pfga" 
  1091. (process file: general analysis) verb in that each position on the EPD 
  1092. input file is subject to a general analysis.  The difference is that 
  1093. each input record contains a set of target moves and a set of avoidance 
  1094. moves.  Either of these two sets, but not both, may be empty.  The set 
  1095. of avoidance moves is given by the operands of a "am" opcode (if 
  1096. present).  The set of target moves is given by the operands of a "bm" 
  1097. opcode (if present).
  1098.  
  1099. Prior to processing the target search, the program is given a search 
  1100. effort limit such as a limit on the amount of search time or search 
  1101. nodes per position.  The "pfts" verb causes each input EPD record to be 
  1102. read, subjected to analysis, and then written to output file with the 
  1103. predicted move attached with the "pm" opcode.  (No "pm" operation is 
  1104. added is the current position is a checkmate or stalemate of the side to 
  1105. play.)
  1106.  
  1107. The output EPD records may also contain other (optional) information 
  1108. such as "acn", "acs", and "pv" operations.
  1109.  
  1110.  
  1111. 8: EPD referee semantics
  1112.  
  1113. Communication between a chessplaying program and a referee program is 
  1114. performed by exchanging EPD records.  Each EPD record emitted by a 
  1115. chessplaying program to be received by the referee has a "refreq" EPD 
  1116. opcode with an operand that describes the request.  Each EPD record 
  1117. emitted by a referee to be received by a chessplaying program has a 
  1118. "refcom" EPD opcode with an operand that describes the command.
  1119.  
  1120. The usual operation sequence in a referee mediated event is as follows:
  1121.  
  1122. 1) The referee server program is started and the human event supervisor 
  1123. provides it with any necessary tournament information including the 
  1124. names of the chessplaying programs, the name of the event, and various 
  1125. other data.
  1126.  
  1127. 2) The referee program completes its initialization by performing 
  1128. pairing operations as required.
  1129.  
  1130. 3) Once the server has its initial data, it then opens a socket and 
  1131. binds it to the appropriate port.  It then starts listening for input 
  1132. from clients.  For a serial implementation, an analogous function is 
  1133. performed.
  1134.  
  1135. 4) The competing chessplaying programs (clients) are started (if not 
  1136. already running) and are given the name of the referee host machine 
  1137. along with the port number.  For a serial implementation, an analogous 
  1138. function is performed.
  1139.  
  1140. 5) Each client program transmits an EPD record to the referee requesting 
  1141. registration.  This causes each client to be signed on to the referee.
  1142.  
  1143. 6) The referee program replies to each client signing on with an EPD 
  1144. record commanding a reset operation to set up for a new game.
  1145.  
  1146. 7) The referee program sends an EPD record to each client informing each 
  1147. client about the values for each of the tag values for the PGN Seven Tag 
  1148. Format.
  1149.  
  1150. 8) For each client on the move, the referee will send an EPD record 
  1151. commanding a response.  This causes each receiving client to calculate a 
  1152. move.  If there has been a prior move, it along with the position from 
  1153. which the move is played is sent.  If there has been no prior move, the 
  1154. current position is sent but no move is included.
  1155.  
  1156. 9) For each client receiving a command to respond, the current position 
  1157. indicated by the record is set as the current position in the receiving 
  1158. program.  (It should already be the current position in the receiver.)  
  1159. If a supplied move was given, it is executed on the current position.  
  1160. Finally, the receiving program calculates a move.
  1161.  
  1162. 10) As each program on the move completes its calculation, it sends a 
  1163. reply to the referee which includes the result of the calculation.  The 
  1164. position sent back on the reply is the result of applying the move 
  1165. received on the referee record to the position on the same received 
  1166. record.  If a move was produced as the result of the calculation, it is 
  1167. also sent.  (A move will not be produced or sent if the receving client 
  1168. was checkmated, or if it was stalemated, of if it resigns, or claims a 
  1169. draw due to insufficient material.)
  1170.  
  1171. 11) As the referee receives a reply from a client, it produces a respond 
  1172. command record to the client's opponent.  (This step will be skipped if 
  1173. an end of game condition is detected and no further moves need to be 
  1174. communicated.)
  1175.  
  1176. 12) The referee continues with the respond/reply cycle for each pair of 
  1177. opponent clients until the game concludes for that pair.
  1178.  
  1179. 13) For each game conclusion, the referee sends a conclude command to 
  1180. each of the clients involved.
  1181.  
  1182. 14) When a client is to be removed from competition, it sends a sign off 
  1183. request.  This eliminates that program from being paired until it 
  1184. re-registers with a sign on request.
  1185.  
  1186. 15) When the referree server is to be removed from network operations, 
  1187. it will send a disconnect command to each client that is currently 
  1188. signed on to the referee.
  1189.  
  1190. 8.1: Referee commands (client directives)
  1191.  
  1192. The referee communicates the command of interest as the single operand 
  1193. of the "refcom" opcode.  The refcom opcode will be on each record sent 
  1194. by the referee.  Each possible refcom operand is sent as an identifier 
  1195. (and not as a string).
  1196.  
  1197. EPD records sent by the referee will include check clock data as 
  1198. appropriate.  Whenever a client program receives a record with the "cc" 
  1199. (chess clock) opcode, the client should set the values of its internal 
  1200. clocks to the values specified by the cc operands.  Note that the clock 
  1201. values for both White and Black are present in a cc operation.
  1202.  
  1203. All EPD records carry the four data fields describing the current 
  1204. position.  In most cases, this position should also be the current 
  1205. position of the receiving client.  If the position sent by the referee 
  1206. matches the client's current position, then the client can assume that 
  1207. all of the game history leading to the current position is valid.  Thus, 
  1208. every client keeps track of the game history internally and uses this to 
  1209. detect repetition draws and so there is no need for each EPD record to 
  1210. contain a complete copy of the game history.
  1211.  
  1212. If the position sent by the referee does not match the receiving 
  1213. program's current position, then the receiving program must set its 
  1214. current position to be the same as the one it received.  Unless an 
  1215. explicit game history move sequence is also sent on the same EPD record, 
  1216. the receiving program is to assume that the new (different) position 
  1217. received has no game history.  In this case the receiving program cannot 
  1218. check for repetition of positions prior to the new position as there 
  1219. aren't any previous positions in the game.
  1220.  
  1221. Each client is expected to maintain its own copy of the halfmove clock 
  1222. (plies since last irreversible move; starts at zero for the initial 
  1223. position) and the fullmove number (which has a value of one for the 
  1224. initial position).  If the referee sends a halfmove clock value or a 
  1225. fullmove number which is different from that kept by the program, then 
  1226. the receiving program is to treat it as a new position and clear any 
  1227. game history.  As noted above, a halfmove clock is sent using the "hmvc" 
  1228. opcode and a fullmove number is sent using a "fmvn" opcode.
  1229.  
  1230. If a supplied move (always using the "sm" opcode) is sent by the 
  1231. referee, the receiving program must execute this move on the current 
  1232. position.  This is done after the program's current position is set to 
  1233. the position sent by the referee (remember that the two will usually 
  1234. match).  The resulting position becomes the new current position.  This 
  1235. new current position is used for all further calculations.  The new 
  1236. current position is also the position to be sent to the referee if a 
  1237. move response is commanded.  When a client program produces a move to be 
  1238. played, it uses the sm opcode with its operand being the supplied move.  
  1239. The position sent is alwasy the position from which the supplied move is 
  1240. to be played.  Thus, the semantics of the current position and the 
  1241. supplied move are symmetric with respect to the client and the server.
  1242.  
  1243.  
  1244. 8.1.1: Referee command: conclude
  1245.  
  1246. The "conclude" refcom operand instructs the client to conclude the 
  1247. current game in progress.  The position sent is the final position of 
  1248. the game.  There is no supplied move sent.  No further EPD records 
  1249. concerning the game will be sent by the referee.  The client should 
  1250. perform any end of game activity required for its normal operation.  No 
  1251. response from the client is made.
  1252.  
  1253. To allow for client game conclusion processing time, the referee will 
  1254. avoid sending any more EPD records to a client concluding a game for a 
  1255. time period set by the human supervisor.  The default delay will be five 
  1256. seconds.
  1257.  
  1258.  
  1259. 8.1.2: Referee command: disconnect
  1260.  
  1261. The "disconnect" refcom operand instructs the client that the referee is 
  1262. terminating service operations.  The client should close its 
  1263. communication channel with the server.  This command is sent at the end 
  1264. of an event or whenever the referee is to be brought down for some 
  1265. reason.  No further EPD records will be sent until the server is cycled.  
  1266. It provides an opportunity for a client to gracefully disconnect from 
  1267. network operations with the server.  No supplied move is sent.  The 
  1268. position sent is irrelevant.  No response from the client is made.
  1269.  
  1270.  
  1271. 8.1.3: Referee command: execute
  1272.  
  1273. The "execute" refcom operand instructs the client to set up a position.  
  1274. If a move is supplied (it usually is), then that move is executed from 
  1275. the position.  The sent position will usually be the receiver's current 
  1276. position.  This command is used only to play through the initial 
  1277. sequence of moves from a game to support a restart capability.  No 
  1278. response is made by the receiver.
  1279.  
  1280.  
  1281. 8.1.4: Referee command: fault
  1282.  
  1283. The "fault" refcom operand is used to indicate that the referee has 
  1284. detected an unrecoverable fault.  The reciever should signal for human 
  1285. intervention to assist with corrective action.  The human supervisor 
  1286. will be notified by the referee regarding the nature of the fault.  No 
  1287. response is made by the receiver.
  1288.  
  1289. A future version of the referee protocol will support some form of 
  1290. automated fault recovery.
  1291.  
  1292.  
  1293. 8.1.5: Referee command: inform
  1294.  
  1295. The "inform" refcom operand is used to convey PGN tag pair data to the 
  1296. receiver.  The "ptp" opcode will carry the PGN tag data to be set on the 
  1297. receiving client.  This command may be sent at any time.  It will 
  1298. usually be sent prior to the first move of a game.  It will also be sent 
  1299. after the last move of a game to communicate the result of the game via 
  1300. the PGN "Result" tag pair.  No response is made by the receiver.
  1301.  
  1302. The main purpose for the inform referee command is to be able to 
  1303. communcate tag pair data to a client without having to send a move or 
  1304. other command.  Note that the ptp opcode may also appear on EPD records 
  1305. from the referee that are not inform commands; its operands are 
  1306. processed in the same way.
  1307.  
  1308. The usual information sent includes the values for the Seven Tag Roster.  
  1309. The PGN tag names are "Event", "Site", "Date", "Round", "White", 
  1310. "Black", and "Result".
  1311.  
  1312. Future versions of the referee will likely send more than just the Seven 
  1313. Tag Roster of PGN tag pairs.  One probable addition will be to send the 
  1314. "TimeControl" tag pair prior to the start of a game; this will allow a 
  1315. receiving program to have its time control parameters set automatically 
  1316. rather than manually.
  1317.  
  1318.  
  1319. 8.1.6: Referee command: reset
  1320.  
  1321. The "reset" refcom operand is used to command the receiving client to 
  1322. set up for a new game.  Any previous information about a game in 
  1323. progress is deleted.  This command will be sent to mark the beginning of 
  1324. a game.  It will also be sent if there is a need to abort the game 
  1325. currently in progress.  No response is made by the receiver.
  1326.  
  1327. To allow for client reset processing time, the referee will avoid 
  1328. sending any more EPD records to a resetting client for a time period set 
  1329. by the human supervisor.  The default delay will be five seconds.
  1330.  
  1331.  
  1332. 8.1.7: Referee command: respond
  1333.  
  1334. The "respond" refcom operand is used to command the receiving client to 
  1335. respond to the move (if any) played by its opponent.  The position to 
  1336. use for calculation is the position sent which is modified by a supplied 
  1337. move (if present; uses the "sm" opcode).  The client program calculates 
  1338. a response and sends it to the referee using the "reply" operand of the 
  1339. "refreq" opcode.
  1340.  
  1341.  
  1342. 8.2: Referee requests (server directives)
  1343.  
  1344. The referee communicates the command of interest as the single operand 
  1345. of the "refcom" opcode.  The refcom opcode will be on each record sent 
  1346. by the referee.  Each possible refcom operand is sent as an identifier 
  1347. (and not as a string).
  1348.  
  1349.  
  1350. 8.2.1: Referee request: fault
  1351.  
  1352.  
  1353. The "fault" refreq operand is used to indicate that the client has 
  1354. detected an unrecoverable fault.  The receiver should signal for human 
  1355. intervention to assist with corrective action.  The human supervisor 
  1356. will be notified by the referee regarding the nature of the fault.  No 
  1357. response is made by the referee.
  1358.  
  1359. A future version of the referee protocol will support some form of 
  1360. automated fault recovery.
  1361.  
  1362.  
  1363. 8.2.2: Referee request: reply
  1364.  
  1365. The "reply" refreq operand is used to carry a reply by the client 
  1366. program.  Usually, a move (the client's reply) is included as the 
  1367. operand of the "sm" opcode.
  1368.  
  1369.  
  1370. 8.2.3: Referee request: sign_off
  1371.  
  1372. The "sign_off" refreq operand is used to indicate that the client 
  1373. program is signing off from the referee connection and no further 
  1374. operations will be made on the communication channel.  The channel in 
  1375. use is then closed by both the referee and the client.
  1376.  
  1377. A new connection must be established and a new "sign_on" referee request 
  1378. needs to be made for further referee operations with the client.
  1379.  
  1380.  
  1381. 8.2.4: Referee request: sign_on
  1382.  
  1383. The "sign_on" refreq operand is used to indicate that the client program 
  1384. is signing on to the referee connection.  This request is required 
  1385. before any further operations can be made on the communication channel.  
  1386. The channel in use remains open until it is closed by either side.
  1387.  
  1388.  
  1389. 9: EPD report generation semantics
  1390.  
  1391. [TBD]
  1392.  
  1393.  
  1394. EPD_Spec: EOF
  1395.  
  1396.  
  1397.  
  1398.  
  1399.